// Copyright 2018 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the “License”);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// <https://apache.org/licenses/LICENSE-2.0>.
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an “AS IS” BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file was generated by scripts/generate-benchmark.py, do not modify!

const dataBig = [{
  a: '-0x4DFB944A8307474952EFE01400F181DABE00A903BBE651CD72C602367480',
  b: '-0xCEAE201DAD87B11031D9A91EF381E00BD8616D7425F76AF2A2E99B4E7B606',
  r: '-0x48E2004A80030101108A800400100098860081021B660108228000263406',
}, {
  a: '-0xFFE6AD1D62C1E6FF3FD810E0865DEB429BC888884A53ADED239',
  b: '-0x2E5116D16CCE5B99C6822CDAB0480C27721D2E651321B286288481FFD06E35',
  r: '-0xE5A08C0822C1A20400C01020824441021B0800884813AD04231',
}, {
  a: '-0xF35E270C23DA18A4119362D201B655E153F634ED073FD237D5683E2A9',
  b: '-0xF9A719F043429639F9B95CD917D4ED29373',
  r: '-0xD001105041429630E9011CD017D46828221',
}, {
  a: '0x338E0D674003833CAC8461355478C52AD04E8BF7E701B8A7353C4A60ED4',
  b: '0xE4BCF480B7FC13A2A18643D5EE44B4ABFAAD2EAC16B313E3',
  r: '0x338E0D67400FCBFFEC8F7FF57E7ADD6EFD5EEFFFEFBFBAF7FFFD6B71FF7',
}, {
  a: '0x7A9737FEC1C26B2B6B583FFA3BCFC44EE7009A35E112E701B87CB6',
  b: '0x823A338DDB09B96FDA2E0095A76EFDD7EF298',
  r: '0x7A9737FEC1C26B2B6B7BBFFAFFFFDFDEFFA2FA3DFB76EFDDFEFEBE',
}, {
  a: '0xCC0D54E47A677D5DD9B44253BD39D3B92B3BCF8FD6E4B89630BACD4DBE44BCFF97',
  b: '-0x961E0BDEDC938DD55778EC51E5E424121AF5E736031030',
  r: '-0x940C02C60C0284C4107028114560040012B04132030029',
}, {
  a: '-0xEEFBC266E1A57DD296C0C46608E40115544CD',
  b: '-0xBF3835690A59F1B40E3E3F4424E05FF9B224B25BBD8F',
  r: '-0x80A1820240A161D002400466082001051048D',
}, {
  a: '-0x98B0D085B040F3E7665F1519B6F374DF01684BE8D57CFCAFEA2D5E6B5D7',
  b: '-0x9CE03BC92A9DF7489E82CCB05E0ED9562EF5AF68E0D7C97CA0FF5F392918B88F1E9D',
  r: '-0x88905081A000C305604D1500A652748E016803C80574F08280090861495',
}, {
  a: '0x8621319C02204A21C2D617A76D31DD958D9004FC0DF02204B38A56D94234854C',
  b: '0xEB98B15CC4FE72361512CC4B3871A09673E19',
  r: '0x8621319C02204A21C2D617A76D3FFD9F9DDC4FFF2FF1732CF7BBD7DB4B77BF5D',
}, {
  a: '-0x63119E223925D1272782C172F65C416A76316D437581101D50DF5B7',
  b: '0xA0698C0A184ECAB9297AC029349F9CA1771A284B7CD95D99A6ADEA0B518',
  r: '-0x631186203104D0052782C160625C0060563001022000101010D40A7',
}, {
  a: '0x8AA244A8E077196CB8201A0A25A03791BBB8C9E1DE',
  b: '0x240E431B273C24D1AE11714E520987A05F5',
  r: '0x8AA244AAE0F739FEFBE25F1AE5B737F5BBB8FBE5FF',
}, {
  a: '-0x73E0E04AE41C00996FAFB0B7FCF7D60078A579336545A918',
  b: '0x54D7FF68A1978990AB97D940328784C62A06A9C0F9FE67D4BF5440387E47',
  r: '-0x72604048241C00186B2990B1543706001821402325458111',
}, {
  a: '0xED97EF4A6D18DC5ACA68252CAE9F275A271D56CF14A5',
  b: '-0x1D7316D835A4760F775F914000281C441C680',
  r: '-0x192212181100740D35160100000808000C25B',
}, {
  a: '0xCB596195F065E9D031392C0ACD00B4019BF1A8',
  b: '0xE2CD4DBF3B4B1CAB5FBFB6D4C75B3874419B1EF3292C',
  r: '0xE2CD4DFF7B6B9DFB7FFFF6F5FF7F3AFD41BF1FFBF9AC',
}, {
  a: '-0x1E7EB464E3C1DE54A49D84859ACDB6362CBC8',
  b: '-0x7C39F3DF96EA47CE026E1446F2252CDB78D25B8655876',
  r: '-0x166A044402401444A005048118C0120604846',
}, {
  a: '-0xDB8B28326C44354CE0327561AB92A37CB4E417968F64687E55F1B71A434F8A711F6B',
  b: '-0xB273AC4F7D074F52D86449C5AAF029FBF3DF8EEB8659CFF81B3749922AF1120B',
  r: '-0x20322C443504401250600980A27020E013968E60005845F0131241020A71120B',
}, {
  a: '-0x1E8B64C31C3BB2E4A00886A91F3E416C2B2B6F5232E824FC2AC94DFDD02',
  b: '0xE610F70BBE43364131F949F785D017C61AF342C3B',
  r: '-0x1E8B64C31C3BB2E4A0088608140000482A0A0612006824E828C10CBD101',
}, {
  a: '0xE94D984AAC6FF271290A864E3974A4D14D3871F294',
  b: '0x3EFA693EA84B22D9C227EF46E35C2CEF81DC24D964EA63193F7E7',
  r: '0x3EFA693EA84FB6D9C6AFEFFFE75EBCEFE5FFB7DB6DFEF39F3F7F7',
}, {
  a: '0x93B24BDB844727D8A668F083434D9E67FDEE6FB0BAFEAB243',
  b: '0x92C3BDD76FFBFEE248BB90981D802BF03AA4ACBAA7917888A08A2179490D40E30',
  r: '0x92C3BDD76FFBFEE2DBBBDBDB9DC72FF8BEECFCBBE7DDFEEFFDEE6FF9FBFFEBE73',
}, {
  a: '-0x63C984129549DD4A82B91B014719463B7E14465BF9B15DDF212674ECB236',
  b: '-0xA8D42147ED8F3249009C19DEAB07067DC247',
  r: '-0x1000036C040249009019DE2106046C8205',
}, {
  a: '0x688E5799A547A0C91DDB1E6BDCF4280E632EA460AF1C8',
  b: '-0xF348DC6E0B397C6A163A1DADD11E8804AC63791D39C6DF6F06803A79C71',
  r: '-0xF348DC6E0B397C0210280408901E00002461100109C6D10C00001A50C31',
}, {
  a: '0x52FA357E4F07A33F16192B12666424CBF635B26560B2C0D2F78C5',
  b: '0xAC95A667EF3656F3ADD5A387F62B14ACD350D3D34E590027AFB3E3B',
  r: '0xACD7FE77FF7F57F3BFD7BBAFF66F74ACDBF6F7F36F79B2E7FFF7EFF',
}, {
  a: '0xFF60FDF8B2A02E44F875215B2178D41171D49',
  b: '0x95089B8494E27B9E7CAE5A5D5272FF479C089AC145138EA4EC',
  r: '0x95089B8494E27FFE7FFFDB7F52F6FFC7DE1DBAD7CD539FBDED',
}, {
  a: '-0x24E622848256803E47CE759F1D5EB7F94E0E093F118223AC289BB6A232C7',
  b: '-0x9B8303EBCE629C657FD37EF1D24DEFB5C18E3D701DDBDAD16DA',
  r: '-0x10003E04C62186155C37E90C04083B100023840099B4A012C1',
}, {
  a: '-0xA5F47C664BC26C72063B1FA666F0300F5EB65C23E948B3',
  b: '-0xC1FCC75CA0D749A095B1CBF037958059DA3FD15312C0C4753204A0A53',
  r: '-0x249008420882007000011DA26410300C0C065020480813',
}, {
  a: '-0x8AF0DBDD4E3023EB9B09C223BD798C59A839ABA89910EDBB1C8B0063166B1',
  b: '0x342731D644D59FF85031EE693FFF481D2F3D3B18C2347D913FB0D0',
  r: '-0x8AF0DBDC0C00228B92000022BC61084800092A2808004C331C88006004621',
}, {
  a: '0xD1A0F268F2CD837EEE64D802AF52526A311D96AD4DB6167BD77096AA67F01267845C1',
  b: '0xE9B7FE018A056BC02EF4AF88A596CA1546AE4',
  r: '0xD1A0F268F2CD837EEE64D802AF52526AF9BFFEADCFB77FFBFFF4BFAAE7F6DA77C6FE5',
}, {
  a: '-0x1A35D13539532E391FD6F4E66396C2BECC60CF4AFCFF986714A',
  b: '0x67A34EC9D55B2F0F2E8AA53F2931F09A315E2C928D535AEA9C991B0FE40DA531F4846E',
  r: '-0x1024012420520C281D16D422421042364C40010A24AC8027102',
}, {
  a: '-0x9B63C83C130907894DD326721644BF76E5863C1FC498B286A6FDF2B34A6FE115CF0F',
  b: '-0x19AA79CFC24C2621676AF0EC9951CD6A0A2',
  r: '-0x182241CC40082020674A202480500148001',
}, {
  a: '-0xDB0D68F22A2D83B437F2E15FA95F146C9081DA707C3709B6E587B69EF1C8D8D275F440',
  b: '-0x14BF9F16931B97AAB6E24F35995CA9AA73C',
  r: '-0x14A70702101B060832604F14890C210A43C',
}, {
  a: '-0xC8A7F33F8DE0AF7CFB45006D89E9CA5531E60212E276CD5EEC1F5567F5D0BCDB55D6C',
  b: '0xA20A18E1C798FCA45914F7267AF0A8F735D',
  r: '-0xC8A7F33F8DE0AF7CFB45006D89E9CA55314400020230450248064100D1800C5300C23',
}, {
  a: '-0x439AB574AA67986D483128CE05A6650E3DD8EE8D270E',
  b: '0x276F6771229372E516CCE4E749E560B427484B2F0694',
  r: '-0x4090900488648808483108080402050A1890A480210A',
}, {
  a: '0xB0493E44B62E5D8003046332EB49BA21E403699239FE5A179',
  b: '-0x27449A2AABD9B21528DF40D58F8FDF27D2279931D5C187DD83BF86EC6A576D4',
  r: '-0x27449A2AABD9B20520C1004181825F24D204891094418619809604C40005683',
}, {
  a: '-0xD55BACDDAA5E819E97CF8BEA786CC2080C184909',
  b: '0x9122045A7C3861778C825CD7198C1C6DE7C46532B5FA8715DCF59281CA003F',
  r: '-0x4220C18218019A854A0168682002080C104901',
}, {
  a: '-0x8E350C001B40DCE40FA30439A559519CFB8E8DEB90E10532',
  b: '0xCD7196B9F7140007F653284E0836BC0A4C75B11F6C8',
  r: '-0x8E350000020040840FA300188559111C900E092880E00132',
}, {
  a: '-0x64781A9A3CF7CBE81DBF9A1DD2135B874695B350A41F6C575',
  b: '-0x83857AE016799EFBEEEDE92AE9CC697949E67395FF2B4E',
  r: '-0x818122C0143880DBE8A1C9202188606949240201F60145',
}, {
  a: '0xCB4AE56B2B157F87A928BE0E83CE669EB4FD26D06238F682E0F64',
  b: '-0xA25221C9DC4CE3C0641E4E90A1E43E9988FB',
  r: '-0x20500101C0088200200C029080601691809B',
}, {
  a: '-0xF387E996A51F8AF16CF84F721638D1A8AFA043A285270689A',
  b: '-0xF43B1E500526DC8424332C7283E6CD95F64E7788DE842B5F7',
  r: '-0xF00308100506888024300C720220C180A6004380840402091',
}, {
  a: '0xAFD2E43634C78E56102FCC9F8B399B8D208821FE5406338C6C6EA975',
  b: '0x8C6577CD6DDEFA37A021E10EE998AE296D888C931534258B',
  r: '0xAFD2E436BCE7FFDF7DFFFEBFAB39FB8FE998AFFF7D8EBF9F7D7EADFF',
}, {
  a: '-0xAE6394B7371CD3BD65D0F89D3B6A1CAF956706739EBAB3',
  b: '-0x788E2F39B088E19292B13A585BB22021FC59849DBEE677D6',
  r: '-0x8E2310B00000929021105819322000AC11040432863291',
}, {
  a: '-0x45689FAD00011E914AA240C879BA56BAFB6E4D52BBB54943686D5C5DA2',
  b: '-0x7BDC15285949B5D946E418291CF4FE74D3B4CAE9831ED9B5DB32780E',
  r: '-0x689C050001089148024008291854BA70420442A98108412049105802',
}, {
  a: '0xE089C84F0166482CF0A9AF7EF9F181A52B90C989D8B34290031',
  b: '-0xC5219C18DD35FB7429E00D67AA0EA6B39EADFA4843775C5C28F055F698B0AB56DDD09C',
  r: '-0xC5219C18DD35FB7429E005632A0EA0931C20F0400010404420A044F200202042D4D08B',
}, {
  a: '-0x80AA6C566386AE0C199C2BCF782038F3AD56',
  b: '0xAA98FC92B972BB2E943BF68CE2BE9EC84DB1665B48B54FAB',
  r: '-0x80684401020C000114224E18203042A055',
}, {
  a: '-0x2DC42B684C4849C5603E91380F17A0AE1625BEC4BF0011',
  b: '-0xBD09B2D17958B070DC7F14C8988E5EBA858A',
  r: '-0x80980403810300014200400008E44BA0001',
}, {
  a: '0x9A4753D61EFCE6A25320EDBA6F1F51E8D3494B279363796B252D95',
  b: '0xCB0D248FDD72ACE4DF43D88E54732AFA717D2A9BF20928E7E8890FF6EA03FF33CAE34',
  r: '0xCB0D248FDD72ACEDFF77FDEFFFFF6AFF737FFBBFF3FD3EEFFC9DBFFFFE37FFB3DAFB5',
}, {
  a: '-0x96388901F77C376FEF04067E6E61E5EECC30CAA2F4F34C1E30',
  b: '-0xB1D1D304743756E9DDC4004899DE30190AB2CBCDF33195C622C6286D',
  r: '-0x4300100E15C0400480006300800A0CACC300080C42244082D',
}, {
  a: '0x42D22BE10DD765D7C894BD4DD10CAAE1BE621ED46E0B5992A2D45F30F7',
  b: '0x28DE0A1BC5D155BAE94A17D044CAF3308DC54DAB4B45967CF72B46840F5',
  r: '0x2CFF2ABFD5DD77FFFDCB5FD4DDDAFBBE9FE76DEF4FE5B7FDFF2F47F70F7',
}, {
  a: '-0x43695E61C91349F6E04E241CB48133E4040DB9D517FBB5CADF57F88B42906D7',
  b: '0x9E3A6379513AF8D0B056450EA4069D4938E8F991D66B',
  r: '-0x43695E61C91349F6E0460418800020400004B8910711B5820B4470004280095',
}, {
  a: '0x68FF0310E8D9B68CB22EA78DBB85C0A8B705A0CAAE78C9D65FB3F',
  b: '0xD1539AD1B46E2333AAF7FC54FCA7C8CCD56D1FA49322CA732A4AD',
  r: '0xF9FF9BD1FCFFB7BFBAFFFFDDFFA7C8ECF76DBFEEBF7ACBF77FFBF',
}, {
  a: '-0xBA0AC0835DE8AA91EA00B3D1BF3E72BCFB385',
  b: '0xEEFD51ADB95D404CCEBCC29C0781347F07B198533C1',
  r: '-0x1202808311200211620032C180384224A8005',
}, {
  a: '0x71810B07F8DA756F91F29E790DD80D15421FC1C417A677A13D8E2AC7DA',
  b: '0x97E001D68843AB6899FBA749C12A8256ABDF83EA3551B8DBBCC69036A04051E',
  r: '0x97E007DE98F3FFEDBFFFFF5FE9EF92DFABDFD7EBFD5DF9FBFFFE93FEE2EC7DE',
}, {
  a: '-0x497B756F865E12F0A13519F9278267E7498D1935CE2831157C71AB254A10E167E7',
  b: '0x762E4E6EDD5325F541B30148AFC47E3084236525BE54556B4E32FBEC03093548',
  r: '-0x49095121800200D0003408F82700238149091810CA002100143189040210E042A7',
}, {
  a: '-0xCB2B23A4D98A43254C659C16EE36ED516AFAE7F18E',
  b: '0xCA4AF056FFBAEC7B35C19664C95C0ECF8B32C016E8EBD90201F7C8F8AC',
  r: '-0xCA2A21801082412044451C00061424516A08270102',
}, {
  a: '-0x1DA5DAA57F0B24FAAC4652E34E605567653',
  b: '0xC07FCBB6274FF22EDDBAD41AE7208ED756C',
  r: '-0x1D801001580004D0204402E108405120213',
}, {
  a: '-0x345E7D2BC27E1DD11068183024A496DA2454BDE',
  b: '0xE4DF31D03D3F12FD041DC2238682774B34B559255CDA',
  r: '-0x205C2C0AC02E1C01104010100004948A2400306',
}, {
  a: '0x86760C9D00E6072F4700FA32B8D7DCA9A1FEDA66205F82',
  b: '-0x14DF7515BCEFC22FE6BB20EBC884C85330E023',
  r: '-0x14197010B8EF000D462820424800001110A021',
}, {
  a: '0x305FAAC8E9A9E22D6B3CD897144668244CEB87CA22A5F',
  b: '0x7294A019D4F0E3B8496CE048320A6EEA58C',
  r: '0x305FAAC8E9FBF6AD7BFCF8F7BC4F6CE44CFB8FEEEAFDF',
}, {
  a: '-0xCF4D5D94FDF2F99D1E3AE340562E2F4E0CA5854482658695AED635D29EE839EF8',
  b: '-0x44248F37800DB59743B868BB0F811797F6D03DDE54CD58B61A88F13B184CEC2',
  r: '-0x440484358009951602A040120E010604A4800482448410A61200D01A0808EC2',
}, {
  a: '-0xDB29D12F8CF6EDA075D8459EEEF9F5E87987',
  b: '-0xF5473336EB521569859777355699F0647DEC2A79A16F5D77CDD426',
  r: '-0x9321110688F06420640841806E5975C85005',
}, {
  a: '-0xB7DE5F6A5803E11A52CE15E42B4F9DA9BD1DC703E132B6E484EAE2D3',
  b: '0x535093C5D7173DC4106F7BE8A905D9FA34A36',
  r: '-0xB7DE5F6A5803E11A52CA00E403028C88211CC100413026A00048A0C1',
}, {
  a: '-0x2D5E51528695BFF93348CAE94251B6BEE4D1194A58EFD5691993544C9ED0B9BF4',
  b: '-0x4FABD4CFCC5499A47712E3F410E4CF8CD29629EF4E43BB6641E740AA6A3114BA0A7A',
  r: '-0x2D4C50400090077122084008405084286090104018A64408100204001040A0A72',
}, {
  a: '0x10E94828B1D66ED3EFDF6B3927360E57DBAEB0BC4726D8C13F2980721',
  b: '-0x66D04185F378CCEF8E382631001D3337AB6583470AE6A2265',
  r: '-0x46000104102084C68808202000110303A841030600C622045',
}, {
  a: '0xB19CEEB264C5703C7961FBFA9486E4A7E1C259796275F7D0C2D45DA2',
  b: '-0x98A795778D52167403AD5EE1C841A80692548C4CF3A754795B631EA81872B80A37A1D',
  r: '-0x98A795778D521464010458A1884028008040040491A500615A6008880002B0023221D',
}, {
  a: '0xBDA393E998888F85CBC52F0569B06A0EA6FE72E80',
  b: '-0xA67A64A7661E8F038326D46E67250A66B829FCDC3C76C',
  r: '-0xA67A4004641607030022142A40200246902158000C16C',
}, {
  a: '-0xDACA1FCAD804572A6F28235BA0E3E894529C98FCADF1AB139CC920E2',
  b: '0x75CB44B0E25AB50903440AE5B0C0AC78A34F9DAA62548E2697BDCF1C',
  r: '-0x8A001B4A180442226C28211A00234084509000548DA12111084020E2',
}, {
  a: '-0x9419CD1379C2BB05A5840098AB544DB2E87A',
  b: '-0x4ADB7B8CF3C56966541BBFB1F512FFC3B7009C880AE3BFB667E9B0B1C330',
  r: '-0x9410CD033100980000800090234000B0C02A',
}, {
  a: '0xC840CB740D9B970BD4E384A105B1BB4FD74418B602BB8A89ED902141C64F01DE7',
  b: '0x59BB72670207606638C3D33A8F4430A86FF746351B6C2E195',
  r: '0xC840CB740D9B970BDDFBF6E707B7FB6FFFC7DBBE8FFFBAA9EFF76775DF6F2FDF7',
}, {
  a: '-0x88A26E5262DD7486480F98B7A1476AC6753DB286BC1CE6FE1',
  b: '0x3D9A1D4471BEB33F5A282FB1E896A730D6421B6FD4E6438FA2AEB9',
  r: '-0x8A06410400854040001109580420AC64100B0828404C4141',
}, {
  a: '-0xAE8783117D8043F01739F7A948F39FC002D5F03A70665F92C6C',
  b: '-0x71E4686DD96B2314BFC62EB75B12758A56984CFBC05E46923B10E37674',
  r: '-0x8C868211498042E015312708006184C00005E02820200E12464',
}, {
  a: '0x1ED25940275A05B2266525223FE6A16FAC8',
  b: '0x95269680DC0EE4A990909368A5B744FF7401518DDDEE0380DB08DD0A9DFFFBB1F6DA21',
  r: '0x95269680DC0EE4A990909368A5B744FF7401FDADDDEE77A0DB2AFF5ADFFFFFFBF6FAE9',
}, {
  a: '0x5737F9B659D5F9E26E9BE33B3B6D8D73F896D9816A5F3A53F066468FB91C5C8FD50EC',
  b: '-0xD877AF02CB6DECDBB907F3EBFE19D7DAA175D2E686C5E70202ED6E0C92',
  r: '-0x80618902414C4C492100C0629201C15A0050C0E0828504020225020C12',
}, {
  a: '-0xDAFC1720B18136C511C0575C2FC36BC11CCFC38D9E7D23',
  b: '0x7147E7AD9AF681BC05F96ADDED7476723AD112952D1CDCAB003DAA7652A',
  r: '-0xC03C00201001208010C0524C06812A00144FC005181801',
}, {
  a: '-0xF230F43779286D5E8DA86DCE2B675A3E0CCD071DC23BAE218AD84983E328964E3B',
  b: '-0x67F1E78B533B196B5509B01DE08D0320CECB8CB60E53',
  r: '-0x4621670A120809031500300C2088000082C308960E13',
}, {
  a: '-0xA993B7B75601C0C100D09C98A4BF21BA5C41144B741440F61B1',
  b: '0xA020DD8480953F3FE6423323F5E8939D0B65EF398FFF',
  r: '-0xA993B7B55400008100800C00809C01800040040B40000066001',
}, {
  a: '0xB3B5BF920CF690CA36FD37B43C8EBA4D8356B7E74B380EB3375A7D9D4853299121',
  b: '-0x5C8439E38A7E4A364A17B104A73B4F8FC84BD294C4E59979FF923C59A',
  r: '-0x10843140802C0034021411048210018B484B1084804000297A8024499',
}, {
  a: '-0x26E4B531B29C5B3ABD1634ACCFA98DCF264D3F623BFAC4B6D89B',
  b: '0xC8EEBE62F5566883AE33E9D3A6EC18C10B37E2EBCC0920A57A105D',
  r: '-0x409500A09458108C16240803A10CC4000D142232DA4084C883',
}, {
  a: '-0xA1BD212338D846CE7D3DE66AC87127330055B',
  b: '0x12BA00FD8580B59722BC525EFE3A2E4AA18EBD86638F8310AB9FFC8651ED4EB440613',
  r: '-0x310021185044CE542002688810210300149',
}, {
  a: '0x15E4471A1EDC0753090B3518904763981206402A31BF9C7699920EC883F2',
  b: '-0xAA1CFF9C7986D9D4A5D5D9DEE33125D48B164',
  r: '-0x22188984788699D404C400188220051003002',
}, {
  a: '-0x25D7DA440A7E410B8FDE1CDB4799245DE33C437580273515067A13BD84AE5',
  b: '-0xC8DD04093D13C4D613E678013C2A2C5D7F24D',
  r: '-0x409904092110405400263001042A001D04245',
}, {
  a: '-0xC9D90B56EB7BC6C6CA0290BC3729D51DE51D1DD77C2',
  b: '0xEFC6523B3CC38AE2F7F3D9707A4538DD41DFCCB0B51E938B060362AC07B30B320D106',
  r: '-0x88C1021620334642C00010B83409511844140DD26C2',
}, {
  a: '-0x192C34577AD99887106941EE51014D67183E1B5C32E36357E24AB6D6C0ED2586173',
  b: '0xD3BF4C5A9F84C61B612A434A8049744C48D649B8',
  r: '-0x192C34577AD99887106941EE510044031816031012416153C242B24080292082043',
}, {
  a: '-0x20172F961E4DBA551AA7417503A6C4FBB6E07D5CDBAB90D9321A55BD',
  b: '-0x3AE88D58C516A65381A7F7470F4FE33B21B76E34EC9ABB92C2C927B1A0AA877',
  r: '-0x112A0418083A5410A44031020244E306C0291808289059120A0035',
}, {
  a: '0x39603E4C8CCC830CC1081D4DD7B6D9FB9450425F6125531C9FED19',
  b: '0x5A78B0F94C4D70BF28C7E3AC38F6229A3EB34ED22740E',
  r: '0x39603E4C8DEF8B0FD5CCDF4FF7BEFFFBD7DF627FE3EF77FDBFFD1F',
}, {
  a: '0x84B5AF0DA70418EC3C71578F04B5CC17CAF18693211780F3',
  b: '-0xC58B61384A175AEBDC43909AB3FCF8B859AE239980CA9CFC5058AF1141E620235',
  r: '-0xC58B61384A175AEBD400800A218CB830182822810080803C0050A71041E600205',
}, {
  a: '0xD753117FED15D381D4B148948A48864DC857339F1EE51',
  b: '-0xDE51D120CEA3C7A52CD27FD626E2149842930DFF4F2E3003B910F33FEB19B13D69C91B',
  r: '-0xDE51D120CEA3C7A52CD27FD622820488000200C742242002B110731B2318800408010B',
}, {
  a: '-0x9E47CB7EA9AAD960E68CCC6DA0D6A6A2A12618DAB2356F9',
  b: '0x685584712DD7741A1739FDF641A8E6E228393B4B046AE341C9F5945F3',
  r: '-0x803C1688002092046080C4580C4A4A2810418120221209',
}, {
  a: '0xB2619C56F3517733273C5DB419A8284C835B068BBC51A22D0',
  b: '-0x23B9624DCE59B3F15B6F554A3FEBA7AF109754295D53F056A466',
  r: '-0x23B040440A1082E0084D040A24AA252D10174009154030448426',
}, {
  a: '-0x17C88F48A6B2A0A870407B416A9D5E9F5774EA7637421DD579A8E33669AAE',
  b: '0xB4162FCB63142337678C68573CECCA3CDA26C344922320A11DE70B',
  r: '-0x17C88F40A69000084000480102195A8C11304832150209945988E126218A5',
}, {
  a: '-0x1E17EF201882F86F253958A688C99D33EEF5171B170',
  b: '-0xD3A47A844DE3ACD1AEC6DF3818082071CC5920FE9A214275867E76F3FD61',
  r: '-0xC05E3000082000C051008A08000051066E5071B161',
}, {
  a: '-0xEB7E052C2B050956F93E779B87E8C5E3BB2E863D40866A0FDE444713B',
  b: '-0xADF237DA2C6CDCA267FEDFB3D9AB951FA19F4E21CF8A43',
  r: '-0x90279224689822045E1BB2C823940820804C20440003',
}, {
  a: '-0x7BE72BEEE35DB1A1644D693E8A88E5852C3C0D5280711FBD328A71D04',
  b: '-0xE7C37FCE17327A041357B6CD998D4F4C77D8781CFB2BAC',
  r: '-0xC302164416126800025012C18085080411D85008A30904',
}, {
  a: '0xDF983E171257A1DA47000CE47AEEE9F3B321EDD5B9B',
  b: '0xFF70FA9135C208AE011732720B67F1E621A7F798BBDC0AE4F42A498',
  r: '0xFF70FA9135C2DFBE3F173277ABFFF7E62DE7FFFEFBFFBBE5FDFFF9B',
}, {
  a: '-0x1C8612FAC85EB6E3E685CC13495FABE21C31BAC534F7C03567E329',
  b: '0x37268785709D667CC670BE17CB8708BBA4F5747B7922002E4CA10341B0EEC',
  r: '-0x88600980018B40282058C104110A8A008219AC51035C00164E101',
}, {
  a: '-0xAC19D977CD46AD701A7A37541F09D109E1D6',
  b: '0x691E2FD9CB0433BC11103F529EA4114A67F81CA',
  r: '-0xC0041478C442C60180A16141E0951006016',
}, {
  a: '-0xEC94341CDCEE6746A2A355FCB4EBDC474B835D1ED43993D1D3FE328D101E2A10A5B',
  b: '-0xA74F52425B9D2E67322662611647464561CA7F8ED95D3876F60A76CEBF9ACD',
  r: '-0x14D424250082A25120242210444000541C84388191D3862200000C2A10A49',
}, {
  a: '0x5409199F1969A0D21ABD5FEBDEDEBA0CDC5A1D7DF76320F63501B27942DC6714F',
  b: '0xA5F8FA04AE60FB7D1F70FFD386BCB3E4152C7F23CD0FDF8CD',
  r: '0x5409199F1969A0D2BFFDFFEFFEFEFB7DDF7AFFFFF7FFB3F6352DFF7BCFDFFF9CF',
}, {
  a: '0x7ACB742BB0855027E0B7C488CF8C16BEF9A49DF683838EBA00DC877AE6',
  b: '-0x650A03AD29059864F85A608D3A408A165CE6B0EA64E8379B6599B7D81D1260A9D',
  r: '-0x650A03A801009844F00A6081300082120426900064A0209345811458101200019',
}, {
  a: '-0xAAC321B09971C263C3629E989D13A0DC71C6AA2B2886513AFD70813E3AE07047',
  b: '-0x10B8A538D954ABBA564F96CB40CDF85461FCA1CF39B9D56D97EFB71ABB673E2EF',
  r: '-0xA8201809140822140600C900C13804411C20823088450187C70012A32606047',
}, {
  a: '-0x46E8F94CBE24B51925E2848B5F319E4EA179176D9E42B53534AEFC4',
  b: '-0xC6CFF7B5AF6946D19CF78A389CBCE9111F95FFB675C2CEA3B710A48AE7C9C',
  r: '-0x4A869449004B508208084891111944EA071024C8202102400A6C84',
}, {
  a: '0xAECBCB608FA05407C966CDB544050DC8BB4DBC4305665EAA87586576BD22B8F6',
  b: '0x118EC040CA38D29C548BF7273C183A873826CD1D',
  r: '0xAECBCB608FA05407C966CDB5558FCDC8FB7DFEDF55EFFFAFBF587FF7BD26FDFF',
}];

const dataSmall = [{
  a: '0xEE40B',
  b: '-0xB3E47C22C3E',
  r: '-0xB3E47C00835',
}, {
  a: '-0x73C5A2',
  b: '0x132A643E',
  r: '-0x518182',
}, {
  a: '0x0',
  b: '0xA35CFDC8DB',
  r: '0xA35CFDC8DB',
}, {
  a: '-0xE32539',
  b: '0x636C392B3B81AE8',
  r: '-0x432511',
}, {
  a: '0x4BC',
  b: '0xF6A4E7679',
  r: '0xF6A4E76FD',
}, {
  a: '0x915D3',
  b: '0x3B7E3AF00F497A8',
  r: '0x3B7E3AF00FD97FB',
}, {
  a: '-0xC4F5D222A0843',
  b: '-0xE3E030F6E9',
  r: '-0x4120200041',
}, {
  a: '-0x3E49D72',
  b: '0x974',
  r: '-0x3E49402',
}, {
  a: '0x0',
  b: '-0x7',
  r: '-0x7',
}, {
  a: '-0x324C',
  b: '0x499524EF9229A',
  r: '-0x1042',
}, {
  a: '-0xC2C88A72AD9',
  b: '0xD8C0656785',
  r: '-0xC2408820859',
}, {
  a: '0x0',
  b: '0x45E022A044B446B',
  r: '0x45E022A044B446B',
}, {
  a: '0x0',
  b: '0x6FA080762CEB',
  r: '0x6FA080762CEB',
}, {
  a: '-0xF520B7B1',
  b: '0xFAFD50900679B',
  r: '-0xF4209021',
}, {
  a: '0x5575D481',
  b: '-0x8513BAED4',
  r: '-0x8000A2A53',
}, {
  a: '0x7A92DAC68E0B5',
  b: '-0xE81832B',
  r: '-0x281030B',
}, {
  a: '0x6856A560E2060C',
  b: '0x0',
  r: '0x6856A560E2060C',
}, {
  a: '-0x62A60172F7E5DB8',
  b: '-0xFB',
  r: '-0xB3',
}, {
  a: '0xCED266A79FB46B1B',
  b: '0xAC68',
  r: '0xCED266A79FB4EF7B',
}, {
  a: '0xC25658A1B63',
  b: '-0x1C3033A91C7F828A',
  r: '-0x1C30338818758089',
}, {
  a: '-0x7D0D5CA1FFB24',
  b: '0xCB3AEF8A',
  r: '-0x7D0D500051022',
}, {
  a: '0x9D',
  b: '-0xF0D916CAE5C8C737',
  r: '-0xF0D916CAE5C8C723',
}, {
  a: '-0xC6D74D5201',
  b: '-0x94D4DA77E62159E',
  r: '-0x8656401001',
}, {
  a: '-0x8503A45911DDE13E',
  b: '0x6A6',
  r: '-0x8503A45911DDE11A',
}, {
  a: '-0x2429C728245AE',
  b: '-0x57E5FB3979948BA',
  r: '-0x24290128040AA',
}, {
  a: '0xBEEAB04D43126AA6',
  b: '0xE8311',
  r: '0xBEEAB04D431EEBB7',
}, {
  a: '0xDC5F7B4515DC2D46',
  b: '-0x4EF5F60506916DB1',
  r: '-0x2A08400020140B1',
}, {
  a: '-0xC98C',
  b: '-0x2FD9CC',
  r: '-0xC98C',
}, {
  a: '0x6E957',
  b: '-0x788',
  r: '-0x681',
}, {
  a: '-0xBED86D0F4',
  b: '0x9D9A8C54928E6F',
  r: '-0x3A9045091',
}, {
  a: '-0x9',
  b: '0x9B9FE20',
  r: '-0x9',
}, {
  a: '-0xC94',
  b: '-0x407EA7368C63EC',
  r: '-0x84',
}, {
  a: '0xAAAD20B30C5AFB',
  b: '-0xD34B75997',
  r: '-0xD04B30105',
}, {
  a: '-0x2C7D0C3633',
  b: '0x1AAD4C0B23C7',
  r: '-0x31041431',
}, {
  a: '-0xB9B8D3962',
  b: '-0x6ABD1',
  r: '-0x42941',
}, {
  a: '0xE',
  b: '-0xABF',
  r: '-0xAB1',
}, {
  a: '0x1B4218AC3D31',
  b: '0x9BF2C908758EB2',
  r: '0x9BFBCB18FDBFB3',
}, {
  a: '-0x9E849C171222678',
  b: '0xC74',
  r: '-0x9E849C171222204',
}, {
  a: '0x373C6',
  b: '0x63B3A87BC3280B',
  r: '0x63B3A87BC37BCF',
}, {
  a: '0x558B7BF',
  b: '0x6C3457FC57',
  r: '0x6C355FFFFF',
}, {
  a: '0xE',
  b: '-0xC7C2B761',
  r: '-0xC7C2B761',
}, {
  a: '-0x3A3738B45BA',
  b: '-0x1A1DECBC773E',
  r: '-0x2016088453A',
}, {
  a: '-0xAD8FC9BA0AC',
  b: '0xAFC9D3977A',
  r: '-0xA5034082082',
}, {
  a: '-0xE5BE679D5F6',
  b: '0xB0AA46C81F',
  r: '-0xE4B443915E1',
}, {
  a: '-0x2D1C87B6A',
  b: '0xB1C4',
  r: '-0x2D1C84A2A',
}, {
  a: '0xC9A7A239E',
  b: '-0xD3367E90ECD0E01',
  r: '-0xD3367E104850C01',
}, {
  a: '-0x28B5D2',
  b: '0x9C1',
  r: '-0x28B411',
}, {
  a: '0x0',
  b: '-0xE7E8',
  r: '-0xE7E8',
}, {
  a: '0x39E23D179D5CEA0',
  b: '-0x2C0D7B0D880D3',
  r: '-0xC00680080053',
}, {
  a: '-0x4A77CFBD3090BD72',
  b: '0x8C211B1F',
  r: '-0x4A77CFBD3090A461',
}, {
  a: '0x2A7',
  b: '-0xDC5',
  r: '-0xD41',
}, {
  a: '0x9F9E4EF',
  b: '0xD3E235B69',
  r: '0xD3FFBFFEF',
}, {
  a: '-0x6EE3AA39D5535',
  b: '-0x72F674B1B914C',
  r: '-0x62E2203191101',
}, {
  a: '0x0',
  b: '0x49289F464EA7CD',
  r: '0x49289F464EA7CD',
}, {
  a: '-0xB896E8B1',
  b: '-0xD896D',
  r: '-0x48821',
}, {
  a: '0xC9D00D3',
  b: '0x0',
  r: '0xC9D00D3',
}, {
  a: '-0x839D3C',
  b: '0x21F33039F',
  r: '-0x809C21',
}, {
  a: '-0x11840E09CFDBF',
  b: '-0x5',
  r: '-0x5',
}, {
  a: '-0x23352E32EAFAE400',
  b: '0xB6D0C6CB3E0D4F',
  r: '-0x23012E3020C0E2B1',
}, {
  a: '-0xFDE943DBAA01',
  b: '0xA78C534',
  r: '-0xFDE941832A01',
}, {
  a: '-0xCBB',
  b: '-0x27A857',
  r: '-0x813',
}, {
  a: '-0x50915ADFDE1708',
  b: '-0xE83EFE88EF6D508',
  r: '-0x81488ED61508',
}, {
  a: '0x49B1C4',
  b: '0xE',
  r: '0x49B1CE',
}, {
  a: '-0xB864908FD7F1026',
  b: '0xD58EE8B',
  r: '-0xB864908F0271025',
}, {
  a: '-0x9E48ED1621F9214',
  b: '-0x6BE6DE1783D139F',
  r: '-0xA40CC1601D1213',
}, {
  a: '-0xB5F58',
  b: '0x9169CC1',
  r: '-0x94317',
}, {
  a: '-0x56AA60E5B6',
  b: '-0x654939D',
  r: '-0x2408195',
}, {
  a: '-0xDDE614D',
  b: '-0x3E9B75AEE0B6',
  r: '-0x58E6005',
}, {
  a: '0xCD25FAA19B2F5F95',
  b: '0x770B',
  r: '0xCD25FAA19B2F7F9F',
}, {
  a: '-0x8A',
  b: '-0x18D3AFA89934681F',
  r: '-0x9',
}, {
  a: '0x2400',
  b: '0x18B5882',
  r: '0x18B7C82',
}, {
  a: '-0x3B902',
  b: '0x512F4B4AA06F30E1',
  r: '-0x8901',
}, {
  a: '-0xA934FD42E716A0AA',
  b: '0x7E5ADD5CC513B3',
  r: '-0xA900A502A312A009',
}, {
  a: '0x2A85A745F50',
  b: '0x87B8F43EB1CEC',
  r: '0x87BAF5BFF5FFC',
}, {
  a: '0x6',
  b: '-0x8316347E4651D81',
  r: '-0x8316347E4651D81',
}, {
  a: '0x121EDECE30',
  b: '0x5FBBA3F6',
  r: '0x125FFFEFF6',
}, {
  a: '0x5A0F5D',
  b: '0xE015ADFB1',
  r: '0xE015ADFFD',
}, {
  a: '-0x92E620664',
  b: '-0x2821B2A26FAD10',
  r: '-0x22620404',
}, {
  a: '-0x2DF06C91F334A',
  b: '0x0',
  r: '-0x2DF06C91F334A',
}, {
  a: '0x9590B23F3627',
  b: '0xB8201DA07C4A',
  r: '0xBDB0BFBF7E6F',
}, {
  a: '-0x85AD27CD4301BCE8',
  b: '0x4ABD437CA7C560',
  r: '-0x85A5028C03003888',
}, {
  a: '0x5944ED9A621AA',
  b: '-0xEC7A',
  r: '-0xCC52',
}, {
  a: '0x47556E5',
  b: '0x19A09EE323',
  r: '0x19A4FFF7E7',
}, {
  a: '-0xD43',
  b: '0x4648DCC2D',
  r: '-0x143',
}, {
  a: '-0xC11379',
  b: '0xA21720B8AB',
  r: '-0xC10351',
}, {
  a: '-0xEB010280',
  b: '-0xFA2',
  r: '-0x222',
}, {
  a: '-0xA5F524AB52',
  b: '0x9EEF7CAF6EB4',
  r: '-0x81008142',
}, {
  a: '0xC10C7C6FED502FF',
  b: '0xC0C6686',
  r: '0xC10C7C6FEDD66FF',
}, {
  a: '0xEAA75DFE784',
  b: '-0x5C803',
  r: '-0x803',
}, {
  a: '0xCE1BBEE11A71',
  b: '-0xDA0ADB5',
  r: '-0x100A585',
}, {
  a: '0x395834D19358695',
  b: '0x419FD527E48428E5',
  r: '0x439FD76FFDB5AEF5',
}, {
  a: '-0x984F2B',
  b: '0x5',
  r: '-0x984F2B',
}, {
  a: '-0x52EA55E5D01CD0',
  b: '-0xD6CD9B142E57224',
  r: '-0x40C81140C01004',
}, {
  a: '0x382F7A4CA7E',
  b: '0xC7E103F',
  r: '0x382FFFEDA7F',
}, {
  a: '-0x362A2212CEC85',
  b: '0x0',
  r: '-0x362A2212CEC85',
}, {
  a: '0xBE8B12',
  b: '0xA31C79',
  r: '0xBF9F7B',
}, {
  a: '-0x87162D9D3',
  b: '-0x6',
  r: '-0x1',
}, {
  a: '0x4C56F8B6C14',
  b: '-0xB7016262F00',
  r: '-0xB30102402EC',
}, {
  a: '0x79D',
  b: '0xF4E',
  r: '0xFDF',
}, {
  a: '0x4',
  b: '0x15B65AC011D7',
  r: '0x15B65AC011D7',
}];

import JSBI from '../dist/jsbi.mjs';
const JSBigInt = JSBI.BigInt;

let errorCount = 0;

const dataBigNative = [];
const dataBigJsbi = [];
const dataSmallNative = [];
const dataSmallJsbi = [];

function hexParseN(s) {
  if (s.charCodeAt(0) === 0x2D) return -BigInt(s.slice(1));
  return BigInt(s);
}
function parseNative(d) {
  if (d.b) {
    return {a: hexParseN(d.a), b: hexParseN(d.b), r: hexParseN(d.r)};
  }
  return {a: hexParseN(d.a), r: hexParseN(d.r)};
}
function hexParse(s) {
  if (s.charCodeAt(0) === 0x2D) {
    const result = JSBigInt(s.slice(1));
    result.sign = true;
    return result;
  }
  return JSBigInt(s);
}
function parseJSBI(d) {
  if (d.b) {
    return {a: hexParse(d.a), b: hexParse(d.b), r: hexParse(d.r)};
  }
  return {a: hexParse(d.a), r: hexParse(d.r)};
}
function prepareData(src, dstNative, dstJsbi) {
  for (let i = 0; i < src.length; i++) {
    const d = src[i];
    dstNative.push(parseNative(d));
    dstJsbi.push(parseJSBI(d));
  }
}
prepareData(dataBig, dataBigNative, dataBigJsbi);
prepareData(dataSmall, dataSmallNative, dataSmallJsbi);


function testNative(data, reps) {
  for (let i = 0; i < data.length; i++) {
    const d = data[i];
    const r = d.a | d.b;
    if (d.r !== r) {
      console.log('Input A:  ' + d.a.toString(16));
      console.log('Input B:  ' + d.b.toString(16));
      console.log('Result:   ' + r.toString(16));
      console.log('Expected: ' + d.r.toString(16));
      console.log('Op: |');
      errorCount++;
    }
  }
  let r;
  const t1 = Date.now();
  for (let j = 0; j < reps; j++) {
    for (let i = 0; i < data.length; i++) {
      const d = data[i];
      r = d.a | d.b;
    }
  }
  // Confuse the compiler into thinking that the loop is needed :-)
  const d = data[data.length - 1];
  if (d.r !== r) throw new Error('no dead code elimination please');
  return Date.now() - t1;
}


function testJsbi(data, reps) {
  for (let i = 0; i < data.length; i++) {
    const d = data[i];
    const r = JSBI.bitwiseOr(d.a, d.b);
    if (!JSBI.equal(r, d.r)) {
      console.log('Input A:  ' + d.a.toString(16));
      console.log('Input B:  ' + d.b.toString(16));
      console.log('Result:   ' + r.toString(16));
      console.log('Expected: ' + d.r.toString(16));
      console.log('Op: bitwiseOr');
      errorCount++;
    }
  }
  let r;
  const t1 = Date.now();
  for (let j = 0; j < reps; j++) {
    for (let i = 0; i < data.length; i++) {
      const d = data[i];
      r = JSBI.bitwiseOr(d.a, d.b);
    }
  }
  // Confuse the compiler into thinking that the loop is needed :-)
  const d = data[data.length - 1];
  if (!JSBI.equal(r, d.r)) throw new Error('no dead code elimination please');
  return Date.now() - t1;
}


const kRepsBig = 40000;
const kRepsSmall = 120000;

console.log('Testing bitwiseOr:');
console.log('Native/big:   ' + testNative(dataBigNative, kRepsBig));
console.log('JSBI/big:     ' + testJsbi(dataBigJsbi, kRepsBig));
console.log('Native/small: ' + testNative(dataSmallNative, kRepsSmall));
console.log('JSBI/small:   ' + testJsbi(dataSmallJsbi, kRepsSmall));

if (errorCount !== 0) {
  console.error('Finished with ' + errorCount + ' errors.');
  // Support both d8 (`quit`) and Node.js (`process.exit`).
  (typeof quit !== 'undefined' ? quit : process.exit)(1);
}
